#include <head.h>

/*
#include <pthread.h>
int pthread_cancel(pthread_t thread);

功能:
    发送取消请求以终止指定线程的执行。

参数:
    thread: 需要取消的线程ID。

返回值:
    成功: 返回 0。
    失败: 返回错误码。

#include <pthread.h>
int pthread_setcancelstate(int state, int *oldstate);

功能:
    设置当前线程的取消状态（启用或禁用取消功能），并返回之前的取消状态。

参数:
    state: 新的取消状态，可以是以下值之一：
        * `PTHREAD_CANCEL_ENABLE` - 允许线程被取消（默认）。
        * `PTHREAD_CANCEL_DISABLE` - 禁止线程被取消。

    oldstate: 用于存储之前的取消状态的指针。如果不需要保存之前的状态，可以传递 `NULL`。

返回值:
    成功: 返回 0。
    失败: 返回错误码。
*/

void *func_1(void *val)
{
    int num = 50;

    while (1)
    {
        sleep(1);
        printf("当前值:%d\n", num);
        if (50 == num)
        {
            pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, NULL); // 禁止 外部取消
        }
        if (40 == num)
        {
            pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); // 运行 外部取消
        }
        num--;
    }
}

int main(int argc, char const *argv[])
{
    pthread_t tid = 0;

    // 创建进程
    if (0 != pthread_create(&tid, NULL, func_1, NULL))
    {
        printf("创建失败\n");
        return 0;
    }

    pthread_detach(tid);
    sleep(5);

    if (0 == pthread_cancel(tid))
    {
        printf("线程已杀死\n");
    }

    while (1)
    {
        sleep(1);
        if (0 == pthread_cancel(tid))
        {
            printf("线程已杀死\n");
        }
        
    }

    return 0;
}
